/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fisica;

import hibernate.Sesion;
import hibernate.objeto.ObraSocial;
import hibernate.objeto.Paciente;
import java.util.Vector;
import org.hibernate.Query;
import presentacion.utilidad.Paginador;

/**
 *
 * @author Gonzalo
 */
public class ObraSocialFisica extends CapaFisica {

    /**
     * Retorna el objeto ObraSocial según el id.
     *
     * @param id El id de la obra social
     * @return El objeto ObraSocial consultado, null si no existe
     */
    public static ObraSocial getObraSocialPorId(int id) {
        Query q = Sesion.sesion.createQuery(
                "from ObraSocial " +
                "where idObraSocial = " + id
                );

        return (ObraSocial) getObjeto(q);
    }

    /**
     * Retorna el objeto ObraSocial según el nombre y el estado.
     *
     * @param nombre El nombre de la Obra Social
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto ObraSocial consultado , null si no existe
     */
    public static ObraSocial getObraSocialPorNombreYEnBd(String nombre,
            boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from ObraSocial " +
                "where lower(sinacentos(detalleObraSocial)) = " +
                "lower(sinacentos('" + nombre + "')) and " + "enBdObraSocial = " + estado
               );
        
        return (ObraSocial) getObjeto(q);
    }

    /**
     * Retorna el vector con los objetos ObraSocial según el estado en la base
     * de datos.
     *
     * @param estado false si es baja lógica, true si aún activo
     * @return El vector de objetos ObraSocial consultado, null si no existe
     */
    public static Vector<ObraSocial> getVectorObraSocialPorEnBd(boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from ObraSocial " +
                "where enBdObraSocial = " + estado
                 + " order by detalleObraSocial asc");

        Paginador.paginar(q);

        return getVectorObjetos(q);
    }

    /**
     * Retorna el vector de objetos Paciente de los cuales la obra social esta
     * asignada.
     *
     * @param idObraSocial El id de la obra social
     * @return El vector de objetos Paciente
     */
    public static Vector<Paciente> getVectorPacientePorIdObraSocial(
            int idObraSocial) {
        Query q = Sesion.sesion.createQuery(
                "select o.pacientes " +
                "from ObraSocial o " +
                "where o.idObraSocial = " + idObraSocial
                );

        return getVectorObjetos(q);
    }

}
